import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/*
 * @lc app=leetcode.cn id=438 lang=java
 *
 * [438] 找到字符串中所有字母异位词
 */

// @lc code=start
class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int slen=s.length();
        int plen=p.length();
        if(slen<plen){
            return new ArrayList<Integer>();
        }
        //滑动窗口，异位词判断
        int[] scnt=new int[26];
        int[] pcnt=new int[26];
        List<Integer> res=new ArrayList<>();
        for(int i=0;i<plen;i++){
            scnt[s.charAt(i)-'a']++;
            pcnt[p.charAt(i)-'a']++;
        }
        if(Arrays.equals(scnt, pcnt)){
            res.add(0);
        }
        for(int i=0;i<slen-plen;i++){
            scnt[s.charAt(i)-'a']--;
            scnt[s.charAt(i+plen)-'a']++;
            if(Arrays.equals(scnt, pcnt)){
                res.add(i+1);
            }
        }
        return res;

    }
}
// @lc code=end

